/* 应用程序的启动文件*/

// 加载express模块
var express = require('express');
// 加载数据库模块
var mongoose = require('mongoose');
// 加载body-parser，用来处理post提交过来的数据
var bodyParser = require('body-parser');

// 加载cookies模块
var cookies = require('cookies');

// 加载模板处理模块
var swig = require('swig');
const Cookies = require('cookies');
// 创建app应用=>node Http.createServe()
var app = express();

var User = require('./models/User');

// 设置静态文件托管
// 当用户访问的url以/public开始，那么直接返回对应的__dirname + '/public'下的文件
app.use('/public', express.static(__dirname + '/public'))

// 配置应用模板
// 定义当前应用所使用的模板引擎
// 第一个参数：模板引擎的名称，同时也是模板文件的后缀
app.engine('html', swig.renderFile)
// 设置模板文件存放的目录，第一个参数必须是views，第二个参数可以自定义，是目录
app.set('views', './views');
// 注册所使用的模板引擎，第一个参数必须是view engine，第二个和app.engine中的模板引擎的名称（第一个参数）必须是一致的
app.set('view engine', 'html')
// 开发环境，取消模板缓存
swig.setDefaults({cache: false})

// bodyParser设置
app.use(bodyParser.urlencoded({extended: true}));

// 设置cookies
app.use(function(req, res, next) {
    req.cookies = new Cookies(req, res);
    // 解析登录用户的cookies信息
    req.userInfo = {};
    if (req.cookies.get('userInfo')) {
        try {
            req.userInfo = JSON.parse(req.cookies.get('userInfo'));
            // 获取当前登录用户是否为管理员
            User.findById(req.userInfo._id).then(function(userInfo) {
                req.userInfo.isAdmin = Boolean(userInfo.isAdmin);
                next();
            })
        } catch(e) {
            next();
        }
    } else {
        next();
    }
    
})

/**
 * 根据不同的功能划分模块
*/
app.use('/admin', require('./routers/admin'));
app.use('/api', require('./routers/api'))
app.use('/', require('./routers/main'))

// /**
//  * 首页
//  * req request对象
//  * res response对象
//  * next对象
// */
// app.get('/', function(req, res, next) {
//     // res.send('<h1>欢迎光临</h1>')
//     /**
//      * 读取views目录下的指定文件，解析并返回给客户端
//      * 第一个参数：表示模板的文件，相对与views目录
//     */
//    res.render('index')
// })

// app.get('/main.css', function(req, res, next) {
//     res.setHeader('content-type', 'text/css');
//     res.send("body{background: red;}");
// })



// 开启数据库

// 连接数据库
mongoose.connect('mongodb://localhost:27017/blog', function(err) {
    if (err) {
        console.log('数据库连接失败！')
    } else {
        console.log('数据库连接成功！')
        // 监听http请求
        app.listen(5500)
    }
});


// 用户发送http请求-> url ->解析路由->找到匹配的规则->执行指定绑定函数，返回对应内容至用户